-- CAN_MONSTER_DEFENSE_GRID

-----------------------------------------------
--  怪物能否守护格子
-- @param  grid  格子
return function(grid)
    local monster = grid.monster;

    -- 不是怪物
    if monster.type ~= OBJECT_TYPE_MONSTER then
        return false;
    end

    -- 1. 怪物死了
    if monster:isDead() then
        return false;
    end

    -- 2. 怪物被“时间停止”了
    local prop = PropM.combine(monster, "stop_action", 1);
    if PropM.apply(prop, 1) > 0 then
        return false;
    end

--    -- 3. 被冰冻了
--    prop = PropM.combine(monster, "frozen", 1);
--    if PropM.apply(prop, 1) > 0 then
--        return false;
--    end

    -- 4. 守卫失效
    if monster.dbase:query("can_not_lock") then
        return false;
    end

    -- 明怪不能守护
    if grid:isPublicGrid() then
        return false;
    end

    -- 显性怪不能守护
    if monster:query("display") then
        return false;
    end

    -- 怪物“失明”了
    prop = PropM.combine(monster, "lost_light", 1);
    if PropM.apply(prop, 1) > 0 then
        return false;
    end

    -- 怪物被“变形”了
    if #PropM.fetchProps(monster, "transfiguration") > 0 then
        return false;
    end

    -- 怪物被“变骷髅”了
    if #PropM.fetchProps(monster, "skeleton") > 0 then
        return false;
    end

    -- 被设定不守护的远程怪
    if monster.dbase:query("remote_can_not_lock") then
        return false;
    end

    -- 玩家令所有怪物不守护格子
    prop = PropM.combine(ME.user, "lost_light2", 1);
    if PropM.apply(prop, 1) > 0 then
        return false;
    end

    -- 其他情况都会守护周围格子
    return true;
end
